package com.junchenrobot.mes.api;

import com.github.lianjiatech.retrofit.spring.boot.core.RetrofitClient;
import com.github.lianjiatech.retrofit.spring.boot.log.Logging;
import com.github.lianjiatech.retrofit.spring.boot.retry.Retry;
import com.junchenrobot.mes.dto.ResponseDto;
import com.junchenrobot.mes.dto.param.*;
import com.junchenrobot.mes.dto.response.VehicleStatusListDto;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;

/**
 * kc api
 *
 * @author SeaWave
 * @date 2022/11/12
 */

@RetrofitClient(baseUrl = "${kc.url}")
public interface KCApi {
    
    /**
     * 自定义类型任务
     *
     * @param freeTaskParam 自定义参数
     * @return {@link ResponseDto}
     */
    @Retry
    @POST("addTask")
    ResponseDto addRegularTask(@Body FreeTaskParam freeTaskParam);
    
    /**
     * 添加移动任务
     *
     * @param moveTaskParam 移动任务参数
     * @return {@link ResponseDto}
     */
    @POST("addMoveTask")
    ResponseDto addMoveTask(@Body MoveTaskParam moveTaskParam);
    
    /**
     * 删除任务
     *
     * @param taskCodeParam 任务参数
     * @return {@link ResponseDto}
     */
    @POST("deleteTask")
    ResponseDto removeTask(@Body TaskCodeParam taskCodeParam);
    
    /**
     * 暂停任务
     *
     * @param taskCodeParam 任务编号
     * @return {@link ResponseDto}
     */
    @POST("pauseTask")
    ResponseDto pauseTask(@Body TaskCodeParam taskCodeParam);
    
    /**
     * 继续已暂停的任务
     *
     * @param taskCodeParam 任务编号
     * @return {@link ResponseDto}
     */
    @POST("resumeTask")
    ResponseDto resumeTask(@Body TaskCodeParam taskCodeParam);
    
    /**
     * 将中断的任务强制完成
     *
     * @param taskCodeParam 任务编号
     * @return {@link ResponseDto}
     */
    @POST("completeTask")
    ResponseDto completeTask(@Body TaskCodeParam taskCodeParam);
    
    /**
     * 取消已经开始执行的任务
     *
     * @param taskCodeParam 任务编号
     * @return {@link ResponseDto}
     */
    @POST("abortTask")
    ResponseDto cancelTask(@Body TaskCodeParam taskCodeParam);
    
    /**
     * 将中断的任务重新执行任务
     *
     * @param taskCodeParam 任务编号
     * @return {@link ResponseDto}
     */
    @POST("restartTask")
    ResponseDto restartTask(@Body TaskCodeParam taskCodeParam);
    
    /**
     * 重新分配任务
     *
     * @param redoTaskParam 重新分配任务参数
     * @return {@link ResponseDto}
     */
    @POST("redoTask")
    ResponseDto redoTask(@Body RedoTaskParam redoTaskParam);
    
    /**
     * 更新任务优先级
     *
     * @param priorityTaskParam 更新任务优先级参数
     * @return {@link ResponseDto}
     */
    @POST("updateTaskPriority")
    ResponseDto updateTaskPriority(@Body PriorityTaskParam priorityTaskParam);
    
    /**
     * 复位小车
     *
     * @param vehicleCodeParam 复位小车
     * @return {@link ResponseDto}
     */
    @POST("resetVechicle")
    ResponseDto resetVehicle(@Body VehicleCodeParam vehicleCodeParam);
   // @POST("")
    
    @Logging(enable = false)
    @GET("allVehicleStatus")
    VehicleStatusListDto allVehicleStatus();
    
}
